iT邦幫忙

2025 iThome 鐵人賽

DAY 14
0
生成式 AI

AI 產品與架構設計之旅:從 0 到 1,再到 Day 2系列 第 14

Day 14: Virtual Key - 不該直接用 Gemini API Key 上線

  • 分享至 

  • xImage
  •  

嗨大家,我是 Debuguy。

還記得 Day 12 我們談到成本透明化的重要性嗎?當時我們讓使用者看到每次對話的花費,但其實錢的問題不只是透明化這麼簡單

今天我們要面對一個更根本的問題:當你把 API Key 直接給團隊使用時,你實際上是把公司的信用卡交給了每一個開發者。這不只是安全性問題,更是預算控制的大漏洞。

現狀:每個人都是超級用戶

// src/index.ts - 目前的危險架構
const ai = genkit({
  plugins: [
    googleAI({
      apiKey: process.env['GEMINI_API_KEY']!  // 💀 所有人共用真實 Key
    }),
  ],
});
# .env - 每個開發者都需要這個
GEMINI_API_KEY=AIzaSyC_your_precious_24_chars_that_cost_money

這個設計的致命問題

無法控制預算

  • 任何人都可以無限制地呼叫 API
  • 沒有機制防止意外的高額費用
  • 預算超支時無法追蹤是誰造成的

無法撤銷權限

  • 員工離職後,Key 依然有效(除非全部換掉)
  • 懷疑 Key 外洩時,影響所有人的開發

無法追蹤使用

  • 不知道誰用了多少 token
  • 無法做成本分攤和部門計費
  • 出問題時無法定位責任

「給每個開發者真實的 API Key,就像給每個員工公司金庫的鑰匙」

企業級解決方案:LiteLLM 代理架構

核心概念:Key 隔離

LiteLLM 的設計思路很簡單:在真實 API 和開發者之間加一層代理

[開發者A] -- Virtual Key --> ┐
[開發者B] -- Virtual Key --> │ [LiteLLM Proxy] -- Real Key --> [Gemini API]
[開發者C] -- Virtual Key --> ┘       ↑
                           權限控制、監控、預算管理

為什麼選擇 LiteLLM?

1. 與現有架構相容性高

LiteLLM 相容 OpenAI API 格式,這意味著我們只需要改一行設定:

// Before: 直接連 Gemini
const ai = genkit({
  plugins: [googleAI({ apiKey: process.env['GEMINI_API_KEY']! })],
});

// After: 透過 LiteLLM
const ai = genkit({
  plugins: [
    openAI({  // LiteLLM 支援 OpenAI API 格式
      apiKey: process.env['LITELLM_API_KEY']!,  // 代用 Key
      baseURL: process.env['LITELLM_BASE_URL']!  // LiteLLM 服務位址
    }),
  ],
});

2. 多模型統一管理

一個 LiteLLM instance 可以代理多個模型提供商:

# LiteLLM 設定範例
model_list:
  - model_name: gemini-flash
    litellm_params:
      model: gemini-2.5-flash-lite
      api_key: env/GEMINI_API_KEY
      
  - model_name: claude-sonnet
    litellm_params:
      model: claude-3-sonnet-20240229
      api_key: env/ANTHROPIC_API_KEY
      
  - model_name: local-llama
    litellm_params:
      model: ollama/llama3
      api_base: http://localhost:11434

3. 企業級功能內建

  • Virtual Keys:為每個開發者產生專屬的代用 Key
  • Budget Control:設定每個 Key 的使用上限
  • Usage Tracking:完整記錄所有 API 呼叫
  • Real-time Monitoring:即時監控使用狀況和異常

新的安全架構

預算控制機制

公司總預算: $2000/月
├── 開發團隊: $800/月
│   ├── Senior Dev: $200/月
│   ├── Junior Dev: $100/月
│   └── Intern: $50/月
├── 測試環境: $500/月
└── 生產環境: $700/月

使用監控和警報

即時監控指標:

  • Token 使用量和成本
  • API 呼叫頻率和錯誤率
  • 各模型的使用分布
  • 異常使用模式偵測

實際的安全提升

開發階段:

  • 每個開發者有獨立的 Key 和預算
  • 測試時不會影響到生產環境的額度
  • 離職時立即撤銷權限,不影響其他人

生產階段:

  • 生產環境有獨立的高權限 Key
  • 完整的使用記錄供審計使用
  • 異常使用立即告警和阻斷

管理階段:

  • 即時了解各部門的 AI 使用成本
  • 基於實際使用數據做預算規劃
  • 透過使用分析優化模型選擇

小結

今天我們把原本的「共用真實 Key」架構,升級為「企業級代理層」架構。

核心改變:安全左移(Shift Left Security)

  • 問題發現左移:從「出事後檢討」移到「架構設計時就防範」
  • 成本控制左移:從「月底看帳單嚇一跳」移到「每個 API 呼叫都有預算控制」
  • 權限管理左移:從「相信開發者不會亂用」移到「系統層面就無法濫用」
  • 監控告警左移:從「使用者抱怨才知道有問題」移到「異常行為立即偵測」

LiteLLM 的價值:

不只是解決了安全問題,更重要的是建立了一套可擴展、可管理、可監控的 LLM 存取架構。當你的 AI 專案從實驗階段進入生產階段時,這套架構會成為你最重要的基礎設施。

「安全不是限制,而是讓你能更大膽地創新」

明天我們要來談 Day 2 思維的另一個關鍵:可觀測性。開發的時候用 GenKit 那上線後要用什麼呢?


LLM 的發展變化很快,目前這個想法以及專案也還在實驗中。但也許透過這個過程大家可以有一些經驗和想法互相交流,歡迎大家追蹤這個系列。

也歡迎追蹤我的 Threads @debuguy.dev


上一篇
Day 13: Scaleibility - 微服務化
系列文
AI 產品與架構設計之旅:從 0 到 1,再到 Day 214
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言